/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.projetoObras.model.dao;

import br.com.projetoObras.connection.ConnectionFactory;
import br.com.projetoObras.model.Artist;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author viniciusvdias
 */
public class ArtistDAO implements InterfaceArtistDAO{
    
    private Connection connection;
    
    public ArtistDAO() throws SQLException{
        this.connection = ConnectionFactory.getConnection();
    }
    
    public void saveArtist(Artist artist) throws SQLException{
        PreparedStatement st = this.connection.prepareStatement(
               "insert into artista"
                + "(nome, sobrenome, nome_civil, nacionalidade, sexo, cidade,"
                + "estado, pais, data_nascimento, data_falecimento,"
                + "contato_artista, biografia, foto)"
                + " values"
                + "(?,?,?,?,?,?,?,?,?::date,?::date,?,?,lo_import(?))"
        );
        
        DAO.setValue(st, 1, artist.getNome(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 2, artist.getSobrenome(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 3, artist.getNome_civil(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 4, artist.getNacionalidade(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 5, artist.getSexo(), java.sql.Types.CHAR);
        DAO.setValue(st, 6, artist.getCidade(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 7, artist.getEstado(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 8, artist.getPais(), java.sql.Types.VARCHAR);
        
        DAO.setValue(st, 9, artist.getData_nasc(), java.sql.Types.DATE);
        DAO.setValue(st, 10, artist.getData_falec(), java.sql.Types.DATE);
        
        DAO.setValue(st, 11, artist.getContato(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 12, artist.getBiografia(), java.sql.Types.VARCHAR);
        
        String fotostr = null;
        if(artist.getFoto()!=null)
            fotostr = artist.getFoto().getAbsolutePath();
        
        DAO.setValue(st, 13, fotostr, java.sql.Types.VARCHAR);
        
        System.out.println(st.toString());
        
        //st.setString(16, artist.getFoto().toString());
        
        st.executeUpdate();  
        st.close();
    }
    
    public ResultSet searchArtist(String search_str) throws SQLException{
         PreparedStatement st = this.connection.prepareStatement(
               "select cod_artista, nome, sobrenome, nome_civil, nacionalidade, sexo, cidade,"
                + "estado, pais, data_nascimento, data_falecimento,"
                + "contato_artista, biografia, lo_export(foto, concat(?,row_number() OVER ())) as foto from artista where "
                 + "nome like ? or "
                 + "sobrenome like ?"
        );
         
         st.setString(1, Artist.temp_foto_path+"artista");
         
         st.setString(2, "%"+search_str+"%");
         st.setString(3, "%"+search_str+"%");
         
         System.out.println(st.toString());
         
         return st.executeQuery();
    }
    
    public void updateArtist(Artist artist) throws SQLException{
        PreparedStatement st = this.connection.prepareStatement(
                "update artista set "
                + "nome=?, sobrenome=?, nome_civil=?, nacionalidade=?, sexo=?, cidade=?,"
                + "estado=?, pais=?, data_nascimento=?, data_falecimento=?,"
                + "contato_artista=?, biografia=?, foto=lo_import(?) where "
                + "cod_artista=?");
        
        DAO.setValue(st, 1, artist.getNome(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 2, artist.getSobrenome(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 3, artist.getNome_civil(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 4, artist.getNacionalidade(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 5, artist.getSexo(), java.sql.Types.CHAR);
        DAO.setValue(st, 6, artist.getCidade(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 7, artist.getEstado(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 8, artist.getPais(), java.sql.Types.VARCHAR);
        
        DAO.setValue(st, 9, artist.getData_nasc(), java.sql.Types.DATE);
        DAO.setValue(st, 10, artist.getData_falec(), java.sql.Types.DATE);
        
        DAO.setValue(st, 11, artist.getContato(), java.sql.Types.VARCHAR);
        DAO.setValue(st, 12, artist.getBiografia(), java.sql.Types.VARCHAR);
        
        if(artist.getFoto()!=null)
            DAO.setValue(st, 13, artist.getFoto().getAbsoluteFile(), java.sql.Types.VARCHAR);
        else
            DAO.setValue(st, 13, null, java.sql.Types.VARCHAR);
        
        DAO.setValue(st, 14, artist.getCodigo(), java.sql.Types.INTEGER);
        
        System.out.println(st.toString());
        
        st.executeUpdate();  
        st.close();
    }
    
    public void deleteArtist(Artist artist) throws SQLException{
        PreparedStatement st = this.connection.prepareStatement(
                "delete from artista where cod_artista=?");
        
        DAO.setValue(st, 1, artist.getCodigo(), java.sql.Types.INTEGER);
        
        System.out.println(st.toString());
        
        st.executeUpdate();  
        st.close();
    }
    
    
}
